1
根据Python对数据类型的定义:"objects are Python's abstraction for data, and all data in a Python program is represented by objects or by relations between objects"。
Python中一切皆对象,包括整数,浮点数和布尔值。在Java中,这些是“primitive数据类型”,并被视为与“objects”分开。
在Python中并非如此。Python中的每个值都是一个对象,所以不仅datetime.datetime(2018, 6, 3, 19, 38, 54, 798338)datetime对象是一个对象,而且整数69是一个对象,布尔True是一个对象。
datetime.datetime(2018, 6, 3, 19, 38, 54, 798338)
69
True
所有的Python对象都有三件事:一个值,一个类型和一个身份。这有点令人困惑,因为我们经常随便说,例如“值69”。
>>> spam = 69>>> spam69>>> type(spam)<class 'int'>>>> id(spam)4307168128
该变量spam指的是具有值69,类型int和id为4307168128。id是一个唯一的整数,在创建对象时创建,并且永远不会改变对象的生命周期。对象的类型也不能改变。只有对象的值可能会改变。
spam
int
4307168128
让我们尝试通过在交互式shell中输入以下内容来更改对象的值:
>>> spam = 69>>> spam = 666
可能有的同学就会认为已经将对象的值从69改变为666,然而并没有。我们所做的都是将spam指向1个新的对象。
>>> spam = 69>>> id(spam)4307168128>>> spam = 666>>> id(spam)4325801680
整数(浮点数,布尔值,字符串,字节)是不可变的。另外,列表(字典,集合,数组和字节数组)是可变的。这可能会导致一个常见的Python陷阱:
>>> spam = ['miracle', 'young']>>> papapa = spam>>> spam['miracle', 'young']>>> papapa['miracle', 'young']>>> spam.append('girl')>>> spam['miracle', 'young', 'girl']>>> papapa['miracle', 'young', 'girl']
究其原因就是papapa和spam同时指向了同一个对象。来看papapa = spam这行。创建了引用的副本,而不是对象。
papapa = spam
2
>>> id(spam) == id(papapa)True>>> spam is papapaTrue>>> spam == papapaTrue>>> fxxk = ['miracle', 'young', 'girl']>>> spam == fxxkTrue>>> id(fxxk)4325976648>>> spam is fxxkFalse>>> id(spam)4325974216
3
spam=69;spam=666
>>> spam = ['miracle', 'young', ['girl', 'boy']]>>> spam = ('miracle', 'young', ['girl', 'boy'])>>> id(spam[0]), id(spam[1]), id(spam[2])(4325825872, 4327743416, 4326146632)
然而在另一种意义上,元组是可变的,因为它们的值可以被改变。
>>> fxxk = ('miracle', 'young', ['girl', 'boy'])>>> spam == fxxkTrue>>> spam is fxxkFalse>>> spam[2].append('man')>>> spam == fxxkFalse
在这个例子中,元组称为通过spam和fxxk具有相等的值(根据==),但是是不同的对象(根据is)。
fxxk
==
is
接着我们改变了spam的值,因为spam不再等于fxxk,而我们也没有改变fxxk的值。所以元组又是可变的。
目前我开了2个主群,我邀请了一些我的BAT伙伴前来助阵。定期也会在群里组织抽奖、送书等活动。更有各种资源分享。
目前2个主群都以过百,想要加入的小伙伴,可以加我微信,我拉你们,或者公众号回复关键“关注作者”。
另外:「高级群」已经升级18.8了!错过了第一波种子轮,这一次的天使轮还要错过吗?不定时组织红包接龙,每天中午1小时的随即话题讨论,没有广告,只聊技术、生活,这样的群上哪找?
文章有问题?点此查看未经处理的缓存